/****************************************************************************
 *
 *   Copyright (c) 2020 Estimation and Control Library (ECL). All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name ECL nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ****************************************************************************/

#include <stdint.h>

static constexpr float SAMPLING_RES = 10;
static constexpr float SAMPLING_MIN_LAT = -90;
static constexpr float SAMPLING_MAX_LAT = 90;
static constexpr float SAMPLING_MIN_LON = -180;
static constexpr float SAMPLING_MAX_LON = 180;

static constexpr int LAT_DIM = 19;
static constexpr int LON_DIM = 37;


// Magnetic declination data in radians * 10^-4
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2020.9181,
static constexpr const int16_t declination_table[19][37] {
//    LONGITUDE:   -180,  -170,  -160,  -150,  -140,  -130,  -120,  -110,  -100,   -90,   -80,   -70,   -60,   -50,   -40,   -30,   -20,   -10,     0,    10,    20,    30,    40,    50,    60,    70,    80,    90,   100,   110,   120,   130,   140,   150,   160,   170,   180,
/* LAT: -90 */ {  26028, 24282, 22537, 20792, 19046, 17301, 15556, 13810, 12065, 10320,  8574,  6829,  5084,  3339,  1593,  -152, -1897, -3642, -5388, -7133, -8878,-10624,-12369,-14114,-15860,-17605,-19350,-21096,-22841,-24586,-26332,-28077,-29823, 31264, 29519, 27773, 26028, },
/* LAT: -80 */ {  22599, 20461, 18517, 16739, 15096, 13556, 12091, 10678,  9302,  7951,  6618,  5299,  3990,  2685,  1378,    60, -1279, -2649, -4055, -5504, -6995, -8528,-10102,-11718,-13379,-15095,-16877,-18747,-20726,-22841,-25113,-27546,-30115, 30074, 27449, 24936, 22599, },
/* LAT: -70 */ {  14963, 13568, 12447, 11490, 10627,  9800,  8961,  8077,  7126,  6108,  5038,  3944,  2856,  1798,   774,  -237, -1272, -2372, -3565, -4857, -6230, -7654, -9097,-10535,-11959,-13373,-14798,-16279,-17893,-19792,-22286,-26046, 30869, 24213, 19630, 16837, 14963, },
/* LAT: -60 */ {   8366,  8132,  7861,  7597,  7353,  7107,  6806,  6379,  5770,  4955,  3958,  2846,  1722,   686,  -205,  -971, -1701, -2516, -3506, -4688, -6004, -7365, -8681, -9891,-10958,-11860,-12579,-13076,-13248,-12798,-10715, -3638,  4727,  7540,  8344,  8488,  8366, },
/* LAT: -50 */ {   5443,  5484,  5436,  5355,  5288,  5258,  5229,  5109,  4772,  4117,  3115,  1846,   501,  -692, -1583, -2166, -2573, -3008, -3672, -4656, -5876, -7140, -8280, -9188, -9798,-10052, -9874, -9133, -7637, -5287, -2390,   355,  2463,  3886,  4760,  5236,  5443, },
/* LAT: -40 */ {   3923,  4019,  4033,  3996,  3943,  3915,  3925,  3918,  3751,  3228,  2218,   785,  -782, -2114, -3002, -3478, -3680, -3749, -3902, -4429, -5366, -6427, -7317, -7872, -8001, -7648, -6780, -5405, -3689, -1976,  -509,   714,  1755,  2614,  3265,  3693,  3923, },
/* LAT: -30 */ {   2957,  3045,  3082,  3077,  3026,  2954,  2899,  2868,  2746,  2279,  1262,  -243, -1854, -3128, -3894, -4262, -4363, -4178, -3750, -3487, -3794, -4520, -5227, -5601, -5501, -4936, -3991, -2781, -1558,  -599,    86,   688,  1308,  1902,  2404,  2761,  2957, },
/* LAT: -20 */ {   2315,  2363,  2389,  2401,  2367,  2280,  2179,  2105,  1962,  1478,   442, -1032, -2516, -3601, -4163, -4306, -4127, -3594, -2743, -1919, -1595, -1918, -2564, -3050, -3108, -2766, -2139, -1317,  -527,   -24,   247,   551,   986,  1454,  1867,  2166,  2315, },
/* LAT: -10 */ {   1921,  1917,  1905,  1912,  1893,  1817,  1715,  1630,  1448,   906,  -138, -1506, -2790, -3646, -3947, -3748, -3192, -2421, -1573,  -805,  -316,  -321,  -775, -1287, -1515, -1436, -1127,  -624,  -116,   136,   195,   359,   723,  1147,  1529,  1807,  1921, },
/* LAT:   0 */ {   1709,  1678,  1631,  1632,  1629,  1569,  1475,  1369,  1119,   504,  -526, -1751, -2819, -3434, -3466, -2992, -2233, -1449,  -789,  -245,   177,   307,    45,  -372,  -636,  -697,  -598,  -333,   -35,    64,    14,   107,   440,   868,  1276,  1586,  1709, },
/* LAT:  10 */ {   1578,  1587,  1553,  1577,  1611,  1571,  1461,  1283,   910,   195,  -822, -1902, -2746, -3112, -2936, -2348, -1575,  -857,  -332,    55,   384,   544,   395,    74,  -166,  -274,  -293,  -207,   -97,  -130,  -260,  -230,    64,   505,   975,  1373,  1578, },
/* LAT:  20 */ {   1403,  1553,  1619,  1717,  1809,  1796,  1652,  1358,   817,   -39, -1084, -2046, -2663, -2796, -2487, -1896, -1187,  -531,   -62,   254,   516,   669,   588,   346,   143,    26,   -58,  -114,  -187,  -371,  -602,  -659,  -432,     5,   537,  1050,  1403, },
/* LAT:  30 */ {   1116,  1484,  1746,  1972,  2135,  2151,  1971,  1555,   830,  -201, -1327, -2221, -2657, -2613, -2225, -1652,  -997,  -375,    95,   408,   643,   796,   783,   637,   485,   362,   214,    14,  -260,  -629,  -995, -1157, -1004,  -585,   -13,   595,  1116, },
/* LAT:  40 */ {    774,  1362,  1856,  2248,  2497,  2543,  2331,  1801,   890,  -344, -1598, -2486, -2826, -2686, -2246, -1657, -1003,  -370,   146,   517,   793,   998,  1100,  1093,  1017,   872,   614,   217,  -310,  -912, -1436, -1686, -1576, -1164,  -565,   111,   774, },
/* LAT:  50 */ {    502,  1253,  1932,  2486,  2849,  2953,  2723,  2067,   919,  -594, -2040, -2976, -3284, -3099, -2611, -1966, -1255,  -553,    68,   581,  1005,  1367,  1655,  1832,  1856,  1676,  1246,   556,  -325, -1226, -1913, -2211, -2093, -1652, -1011,  -270,   502, },
/* LAT:  60 */ {    333,  1191,  1997,  2687,  3184,  3388,  3165,  2340,   801, -1195, -2944, -3940, -4196, -3934, -3358, -2609, -1778,  -932,  -119,   638,  1336,  1973,  2523,  2928,  3099,  2928,  2313,  1222,  -178, -1503, -2388, -2710, -2549, -2049, -1343,  -528,   333, },
/* LAT:  70 */ {    148,  1093,  1993,  2790,  3398,  3679,  3403,  2218,  -114, -2917, -4894, -5706, -5694, -5192, -4408, -3462, -2427, -1353,  -271,   795,  1826,  2798,  3672,  4389,  4849,  4901,  4324,  2895,   737, -1371, -2686, -3142, -2982, -2441, -1677,  -792,   148, },
/* LAT:  80 */ {   -390,   539,  1399,  2096,  2477,  2256,   924, -1992, -5466, -7595, -8262, -8056, -7372, -6416, -5296, -4076, -2793, -1475,  -141,  1194,  2514,  3800,  5030,  6169,  7166,  7927,  8278,  7866,  6053,  2506,  -981, -2727, -3133, -2830, -2164, -1316,  -390, },
/* LAT:  90 */ { -30446,-28700,-26955,-25209,-23464,-21718,-19973,-18228,-16482,-14737,-12992,-11247, -9501, -7756, -6011, -4266, -2521,  -776,   970,  2715,  4460,  6205,  7950,  9696, 11441, 13186, 14932, 16677, 18423, 20168, 21913, 23659, 25404, 27150, 28895, 30641,-30446, },
};

// Magnetic inclination data in radians * 10^-4
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2020.9181,
static constexpr const int16_t inclination_table[19][37] {
//    LONGITUDE:   -180,  -170,  -160,  -150,  -140,  -130,  -120,  -110,  -100,   -90,   -80,   -70,   -60,   -50,   -40,   -30,   -20,   -10,     0,    10,    20,    30,    40,    50,    60,    70,    80,    90,   100,   110,   120,   130,   140,   150,   160,   170,   180,
/* LAT: -90 */ { -12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12581,-12581,-12581,-12581,-12581,-12581,-12581,-12581,-12581,-12581,-12581,-12581,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582,-12582, },
/* LAT: -80 */ { -13669,-13536,-13375,-13195,-13001,-12798,-12594,-12393,-12201,-12024,-11867,-11732,-11622,-11535,-11472,-11431,-11411,-11414,-11441,-11496,-11579,-11693,-11837,-12010,-12207,-12424,-12652,-12885,-13113,-13326,-13514,-13665,-13770,-13822,-13820,-13767,-13669, },
/* LAT: -70 */ { -14120,-13801,-13482,-13159,-12826,-12481,-12125,-11766,-11421,-11111,-10856,-10670,-10556,-10503,-10490,-10496,-10505,-10517,-10543,-10599,-10706,-10879,-11122,-11434,-11804,-12220,-12667,-13130,-13597,-14050,-14469,-14817,-15011,-14962,-14733,-14435,-14120, },
/* LAT: -60 */ { -13527,-13175,-12838,-12505,-12162,-11789,-11373,-10917,-10448,-10014, -9679, -9498, -9489, -9623, -9829,-10027,-10160,-10212,-10206,-10195,-10240,-10394,-10676,-11078,-11571,-12124,-12709,-13305,-13893,-14454,-14951,-15242,-15075,-14694,-14290,-13898,-13527, },
/* LAT: -50 */ { -12499,-12159,-11830,-11509,-11186,-10839,-10439, -9967, -9435, -8909, -8511, -8375, -8564, -9019, -9585,-10104,-10477,-10656,-10641,-10498,-10356,-10352,-10560,-10965,-11500,-12089,-12677,-13218,-13667,-13967,-14077,-14005,-13803,-13520,-13193,-12847,-12499, },
/* LAT: -40 */ { -11240,-10895,-10551,-10207, -9868, -9529, -9166, -8739, -8216, -7646, -7209, -7149, -7590, -8404, -9328,-10166,-10837,-11289,-11452,-11306,-10972,-10692,-10667,-10933,-11386,-11890,-12340,-12669,-12833,-12840,-12749,-12610,-12429,-12196,-11910,-11584,-11240, },
/* LAT: -30 */ {  -9601, -9229, -8855, -8467, -8074, -7696, -7336, -6942, -6426, -5812, -5346, -5401, -6142, -7330, -8583, -9689,-10616,-11343,-11768,-11786,-11433,-10927,-10578,-10562,-10804,-11125,-11387,-11509,-11452,-11276,-11098,-10958,-10808,-10598,-10317, -9974, -9601, },
/* LAT: -20 */ {  -7368, -6939, -6531, -6106, -5662, -5229, -4833, -4413, -3842, -3153, -2687, -2911, -3983, -5577, -7210, -8598, -9683,-10479,-10943,-11004,-10661,-10057, -9493, -9236, -9275, -9435, -9581, -9607, -9439, -9165, -8965, -8869, -8756, -8543, -8226, -7818, -7368, },
/* LAT: -10 */ {  -4410, -3891, -3450, -3018, -2561, -2109, -1689, -1223,  -587,   126,   509,   122, -1165, -3061, -5043, -6680, -7807, -8466, -8753, -8710, -8321, -7652, -6987, -6630, -6583, -6675, -6797, -6826, -6642, -6343, -6180, -6174, -6119, -5895, -5512, -4990, -4410, },
/* LAT:   0 */ {   -900,  -296,   155,   551,   967,  1385,  1782,  2239,  2839,  3429,  3653,  3191,  1933,    47, -2002, -3684, -4729, -5185, -5262, -5106, -4684, -3985, -3280, -2899, -2835, -2907, -3036, -3112, -2984, -2746, -2680, -2803, -2846, -2650, -2227, -1605,  -900, },
/* LAT:  10 */ {   2567,  3175,  3597,  3932,  4285,  4653,  5012,  5412,  5879,  6262,  6315,  5852,  4798,  3252,  1559,   159,  -678,  -951,  -876,  -650,  -253,   372,  1005,  1348,  1410,  1359,  1255,  1163,  1208,  1316,  1251,  1004,   833,   914,  1265,  1859,  2567, },
/* LAT:  20 */ {   5420,  5936,  6306,  6598,  6910,  7254,  7603,  7961,  8306,  8517,  8443,  7998,  7179,  6094,  4966,  4041,  3491,  3353,  3490,  3725,  4048,  4505,  4963,  5221,  5275,  5250,  5198,  5142,  5134,  5121,  4957,  4640,  4356,  4273,  4444,  4861,  5420, },
/* LAT:  30 */ {   7570,  7937,  8250,  8531,  8839,  9188,  9550,  9898, 10184, 10306, 10171,  9760,  9139,  8430,  7766,  7245,  6942,  6887,  7020,  7226,  7467,  7761,  8048,  8222,  8276,  8284,  8282,  8273,  8255,  8178,  7964,  7620,  7273,  7057,  7040,  7231,  7570, },
/* LAT:  40 */ {   9265,  9485,  9740, 10025, 10352, 10715, 11087, 11431, 11689, 11778, 11635, 11279, 10808, 10333,  9933,  9644,  9488,  9476,  9580,  9736,  9908, 10088, 10259, 10384, 10460, 10517, 10568, 10601, 10588, 10483, 10247,  9902,  9539,  9257,  9114,  9125,  9265, },
/* LAT:  50 */ {  10801, 10923, 11125, 11396, 11721, 12077, 12435, 12755, 12982, 13045, 12908, 12611, 12246, 11898, 11619, 11429, 11331, 11322, 11384, 11483, 11593, 11707, 11822, 11937, 12053, 12173, 12284, 12357, 12352, 12233, 11991, 11666, 11328, 11043, 10854, 10774, 10801, },
/* LAT:  60 */ {  12318, 12393, 12546, 12767, 13040, 13343, 13648, 13917, 14095, 14123, 13987, 13736, 13445, 13171, 12948, 12789, 12695, 12660, 12673, 12718, 12783, 12866, 12970, 13101, 13258, 13432, 13596, 13708, 13718, 13603, 13381, 13103, 12824, 12586, 12415, 12325, 12318, },
/* LAT:  70 */ {  13759, 13805, 13903, 14049, 14231, 14438, 14648, 14831, 14935, 14912, 14770, 14565, 14345, 14140, 13965, 13828, 13733, 13677, 13656, 13667, 13707, 13777, 13879, 14014, 14179, 14365, 14549, 14692, 14742, 14673, 14514, 14316, 14121, 13956, 13836, 13769, 13759, },
/* LAT:  80 */ {  15004, 15019, 15059, 15121, 15201, 15289, 15370, 15414, 15390, 15305, 15187, 15060, 14936, 14820, 14720, 14637, 14575, 14533, 14514, 14517, 14543, 14591, 14662, 14753, 14864, 14990, 15124, 15256, 15362, 15409, 15375, 15292, 15199, 15117, 15054, 15016, 15004, },
/* LAT:  90 */ {  15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, },
};

// Magnetic strength data in milli-Gauss * 10
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2020.9181,
static constexpr const int16_t strength_table[19][37] {
//    LONGITUDE:  -180, -170, -160, -150, -140, -130, -120, -110, -100,  -90,  -80,  -70,  -60,  -50,  -40,  -30,  -20,  -10,    0,   10,   20,   30,   40,   50,   60,   70,   80,   90,  100,  110,  120,  130,  140,  150,  160,  170,  180,
/* LAT: -90 */ {  5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, },
/* LAT: -80 */ {  6067, 6005, 5927, 5835, 5733, 5622, 5504, 5383, 5261, 5141, 5026, 4921, 4827, 4747, 4683, 4638, 4613, 4610, 4630, 4676, 4745, 4838, 4952, 5083, 5226, 5376, 5525, 5668, 5799, 5913, 6006, 6076, 6120, 6141, 6137, 6112, 6067, },
/* LAT: -70 */ {  6312, 6180, 6032, 5868, 5691, 5499, 5295, 5080, 4861, 4645, 4442, 4258, 4100, 3968, 3864, 3786, 3738, 3725, 3752, 3827, 3953, 4131, 4358, 4624, 4918, 5225, 5528, 5812, 6062, 6267, 6419, 6515, 6558, 6552, 6504, 6421, 6312, },
/* LAT: -60 */ {  6196, 6006, 5807, 5600, 5382, 5148, 4892, 4614, 4321, 4031, 3763, 3534, 3353, 3218, 3118, 3044, 2994, 2973, 2998, 3086, 3252, 3500, 3824, 4207, 4628, 5062, 5483, 5867, 6193, 6443, 6608, 6688, 6692, 6631, 6519, 6370, 6196, },
/* LAT: -50 */ {  5851, 5624, 5393, 5164, 4933, 4689, 4420, 4117, 3788, 3455, 3152, 2910, 2746, 2654, 2605, 2572, 2540, 2514, 2519, 2589, 2757, 3042, 3433, 3901, 4406, 4912, 5388, 5808, 6149, 6392, 6532, 6575, 6534, 6425, 6265, 6069, 5851, },
/* LAT: -40 */ {  5399, 5155, 4912, 4673, 4440, 4204, 3950, 3667, 3353, 3026, 2726, 2501, 2381, 2354, 2373, 2397, 2404, 2394, 2383, 2410, 2534, 2801, 3211, 3720, 4266, 4791, 5261, 5652, 5946, 6135, 6225, 6229, 6161, 6032, 5852, 5636, 5399, },
/* LAT: -30 */ {  4882, 4643, 4406, 4173, 3948, 3729, 3511, 3280, 3025, 2750, 2492, 2307, 2233, 2255, 2322, 2395, 2462, 2516, 2541, 2555, 2617, 2805, 3157, 3639, 4169, 4668, 5091, 5412, 5618, 5719, 5746, 5720, 5642, 5510, 5332, 5117, 4882, },
/* LAT: -20 */ {  4323, 4112, 3906, 3702, 3507, 3324, 3156, 2994, 2817, 2620, 2429, 2293, 2248, 2287, 2374, 2485, 2614, 2746, 2840, 2879, 2902, 2991, 3220, 3596, 4043, 4472, 4825, 5065, 5174, 5183, 5153, 5105, 5023, 4896, 4730, 4534, 4323, },
/* LAT: -10 */ {  3791, 3632, 3481, 3336, 3201, 3081, 2978, 2888, 2792, 2680, 2558, 2457, 2407, 2425, 2508, 2635, 2791, 2953, 3081, 3148, 3163, 3186, 3302, 3546, 3869, 4190, 4458, 4626, 4665, 4614, 4546, 4482, 4392, 4268, 4119, 3957, 3791, },
/* LAT:   0 */ {  3412, 3321, 3239, 3167, 3112, 3074, 3050, 3033, 3012, 2966, 2887, 2792, 2708, 2671, 2707, 2807, 2939, 3076, 3194, 3272, 3305, 3325, 3395, 3547, 3753, 3966, 4147, 4256, 4265, 4199, 4111, 4018, 3906, 3775, 3641, 3519, 3412, },
/* LAT:  10 */ {  3283, 3253, 3234, 3232, 3258, 3306, 3363, 3420, 3457, 3449, 3381, 3266, 3137, 3037, 3005, 3042, 3122, 3220, 3320, 3406, 3471, 3532, 3618, 3733, 3866, 4002, 4122, 4194, 4199, 4139, 4031, 3888, 3726, 3568, 3433, 3338, 3283, },
/* LAT:  20 */ {  3400, 3405, 3433, 3489, 3582, 3705, 3836, 3956, 4039, 4053, 3980, 3837, 3668, 3524, 3443, 3426, 3459, 3529, 3625, 3721, 3811, 3908, 4018, 4128, 4235, 4344, 4445, 4512, 4525, 4469, 4334, 4134, 3908, 3699, 3537, 3437, 3400, },
/* LAT:  30 */ {  3723, 3733, 3791, 3893, 4038, 4211, 4388, 4546, 4656, 4684, 4611, 4454, 4262, 4093, 3983, 3933, 3934, 3981, 4066, 4163, 4259, 4363, 4478, 4596, 4715, 4839, 4958, 5045, 5073, 5019, 4865, 4627, 4354, 4101, 3902, 3776, 3723, },
/* LAT:  40 */ {  4223, 4225, 4294, 4420, 4590, 4779, 4964, 5121, 5226, 5252, 5183, 5033, 4843, 4665, 4533, 4454, 4425, 4444, 4501, 4579, 4663, 4759, 4873, 5007, 5157, 5317, 5468, 5579, 5621, 5570, 5416, 5180, 4906, 4647, 4436, 4293, 4223, },
/* LAT:  50 */ {  4831, 4829, 4890, 5003, 5152, 5313, 5463, 5584, 5656, 5665, 5600, 5471, 5305, 5138, 4998, 4898, 4841, 4826, 4849, 4897, 4965, 5054, 5172, 5322, 5497, 5680, 5847, 5967, 6015, 5974, 5845, 5649, 5423, 5206, 5026, 4898, 4831, },
/* LAT:  60 */ {  5392, 5384, 5417, 5484, 5572, 5667, 5753, 5818, 5849, 5838, 5782, 5686, 5563, 5433, 5312, 5214, 5146, 5110, 5106, 5133, 5188, 5273, 5390, 5536, 5703, 5872, 6020, 6127, 6173, 6153, 6071, 5944, 5796, 5652, 5530, 5441, 5392, },
/* LAT:  70 */ {  5726, 5709, 5710, 5725, 5748, 5775, 5798, 5811, 5809, 5788, 5747, 5687, 5615, 5538, 5463, 5397, 5348, 5319, 5314, 5333, 5377, 5445, 5536, 5645, 5762, 5877, 5978, 6052, 6092, 6096, 6067, 6014, 5946, 5875, 5811, 5760, 5726, },
/* LAT:  80 */ {  5789, 5772, 5759, 5748, 5739, 5729, 5719, 5707, 5692, 5672, 5649, 5623, 5595, 5567, 5541, 5520, 5505, 5500, 5504, 5519, 5544, 5579, 5621, 5669, 5719, 5767, 5811, 5845, 5870, 5883, 5886, 5879, 5866, 5848, 5827, 5807, 5789, },
/* LAT:  90 */ {  5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, },
};
